home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / pprd100 / jdlprd.pl < prev    next >
Perl Script  |  1996-07-10  |  1KB  |  64 lines

  1. #!/usr/local/bin/perl
  2. #
  3. #    Server to translate direct connections to port 9100 to
  4. #    a lpr job.
  5. #    Invoke with -i if not running from inetd.
  6. #    Edit the lprcmd and port number if necessary.
  7. #
  8.  
  9. require 'sys/socket.ph';
  10.  
  11. $port = 9100;
  12. $lprcmd = "| lpr";
  13.  
  14. $sockaddr = 'S n a4 x8';
  15.  
  16. if ($#ARGV >= 0 && $ARGV[0] eq "-i")
  17. {
  18.     &standalone();
  19. }
  20. else
  21. {
  22.     &serve(*stdin);
  23. }
  24. exit 0;
  25.  
  26. sub serve
  27. {
  28.     local(*F)    = @_;
  29.  
  30.     $addr = getpeername(F);
  31.     ($af, $port, $inetaddr) = unpack($sockaddr, $addr);
  32. #    print STDERR "$af $port @inetaddr\n";
  33.     ($name, $aliases, $addrtype, $length, @addrs) = gethostbyaddr($inetaddr, &AF_INET);
  34.     open(L, $lprcmd) || die "open: $!";
  35.     for (;;)
  36.     {
  37.         $nread = read(F, $buffer, 1024);
  38.         last if $nread == 0;
  39.         print(L $buffer);
  40.     }
  41.     close(L);
  42. }
  43.  
  44. sub standalone
  45. {
  46.     ($name, $aliases, $proto) = getprotobyname('tcp');
  47.     $this = pack($sockaddr, &AF_INET, $port, "\0\0\0\0");
  48.     select(NS); $| = 1; select(stdout);
  49.     socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!";
  50.     bind(S, $this) || die "bind: $!";
  51.     listen(S, 5) || die "connect: $!";
  52.     select(S); $| = 1; select(stdout);
  53.     for (;;)
  54.     {
  55. #        print STDERR "Listening again\n";
  56.         ($addr = accept(NS,S)) || die $!;
  57. #        print STDERR "Accept ok\n";
  58.         ($af,$port,$inetaddr) = unpack($sockaddr,$addr);
  59.         @inetaddr = unpack('C4',$inetaddr);
  60. #        print STDERR "$af $port @inetaddr\n";
  61.         &serve(*NS);
  62.     }
  63. }
  64.